
package main

import (
	"fmt"
	
)

// FindContinuousSubarrays 寻找数组中所有连续子数组
func FindContinuousSubarrays(nums []int) [][]int {
	if len(nums) == 0 {
        return nil
    }
    
    var result [][]int      // 存储所有连续子数组
    var subarray []int      // 存储当前连续子数组

    // 初始化第一个连续子数组
    subarray = append(subarray, nums[0])

    for i := 1; i < len(nums); i++ {
        // 检查当前元素是否连续
        if nums[i] == nums[i-1]+1 {
            // 如果连续，添加到当前连续子数组
            subarray = append(subarray, nums[i])
        } else {
            // 如果不连续，保存当前连续子数组，并开始新的连续子数组
            result = append(result, subarray)
            subarray = []int{nums[i]} // 重置连续子数组为当前元素
        }
    }

    // 添加最后一个连续子数组到结果
    result = append(result, subarray)

    return result
}

func main() {
    nums := []int{1, 2, 3, 4, 5, 7, 8, 9, 10, 12}
    result := FindContinuousSubarrays(nums)
    for _, subarray := range result {
        fmt.Println(subarray)
    }
}

/*
代码解释:

findContinuousSubarrays 函数接收一个数组 nums 作为输入，并返回所有连续子数组的切片。
首先，我们定义一个变量 start 指示当前连续子数组的起始位置。
然后，遍历数组 nums，并比较相邻元素之间的差值。
如果差值不等于 1，则表示当前连续子数组结束。
如果当前连续子数组的长度大于 1，则将其添加到结果切片 result 中。
最后，返回结果切片 result。
输出:
[1 2 3 4 5]
[7 8 9 10]
[12]
*/